*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:var(--type-font-family);font-size:var(--type-body);line-height:var(--type-line-normal);color:var(--color-text-primary);background:var(--color-background);-webkit-font-smoothing:antialiased}a{color:var(--color-primary);text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3,h4,p{margin:0}button{font-family:inherit;cursor:pointer}input,select,textarea,button{font-family:inherit;font-size:var(--type-body)}:focus-visible{outline:3px solid var(--color-focus-ring);outline-offset:1px}.stack{display:flex;flex-direction:column}.row{display:flex;align-items:center}.spread{display:flex;align-items:center;justify-content:space-between}.wrap{flex-wrap:wrap}.grow{flex:1}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-sm);border:1px solid transparent;border-radius:var(--radius-md);padding:10px var(--space-md);font-weight:var(--type-weight-semibold);font-size:var(--type-body);line-height:1;transition:background .12s ease,border-color .12s ease,opacity .12s;white-space:nowrap}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--color-primary);color:var(--color-on-primary)}.btn-primary:hover:not(:disabled){background:var(--color-primary-hover)}.btn-secondary{background:var(--color-surface);color:var(--color-text-primary);border-color:var(--color-border-strong)}.btn-secondary:hover:not(:disabled){background:var(--color-surface-alt)}.btn-ghost{background:transparent;color:var(--color-primary)}.btn-ghost:hover:not(:disabled){background:var(--color-primary-muted)}.btn-danger{background:var(--color-danger);color:#fff}.btn-block{width:100%}.btn-lg{padding:14px var(--space-lg);font-size:var(--type-subhead)}.link-button{display:inline;padding:0;margin:0;border:0;background:none;font:inherit;line-height:inherit;color:inherit;cursor:pointer}.link-button:hover:not(:disabled){text-decoration:underline}.field{display:flex;flex-direction:column;gap:6px}.field-label{font-size:var(--type-label);font-weight:var(--type-weight-medium);color:var(--color-text-secondary)}.field-help{font-size:var(--type-caption);color:var(--color-text-muted)}.input,.select,.textarea{width:100%;border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);padding:10px var(--space-md);background:var(--color-surface);color:var(--color-text-primary)}.input:focus,.select:focus,.textarea:focus{border-color:var(--color-primary);outline:none;box-shadow:0 0 0 3px var(--color-focus-ring)}.textarea{min-height:80px;resize:vertical}.input-affix{position:relative;display:flex;align-items:center}.input-affix-prefix{position:absolute;left:var(--space-md);color:var(--color-text-muted);pointer-events:none;font-weight:var(--type-weight-medium)}.input-affix-field{padding-left:calc(var(--space-md) + 12px)}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm)}.card-pad{padding:var(--space-lg)}.badge{display:inline-flex;align-items:center;gap:6px;border-radius:var(--radius-pill);padding:3px 10px;font-size:var(--type-label);font-weight:var(--type-weight-semibold);line-height:1.4}.pill{display:inline-flex;align-items:center;justify-content:center;min-width:44px;border-radius:var(--radius-pill);padding:4px 10px;font-weight:var(--type-weight-bold);font-family:var(--type-font-family-mono);font-size:var(--type-label)}.notification-row{border-left:3px solid transparent}.notification-row.unread{border-left-color:var(--color-primary);background:var(--color-primary-muted)}.notification-dot{flex:0 0 auto;width:8px;height:8px;margin-top:7px;border-radius:var(--radius-pill);background:transparent}.notification-row.unread .notification-dot{background:var(--color-primary)}.banner{border-radius:var(--radius-md);padding:var(--space-md);font-size:var(--type-body)}.banner-error{background:var(--color-danger-muted);color:var(--color-danger);border:1px solid var(--color-danger)}.banner-info{background:var(--color-info-muted);color:var(--color-info);border:1px solid var(--color-info)}.banner-success{background:var(--color-success-muted);color:var(--color-success);border:1px solid var(--color-success)}.banner-warning{background:var(--color-warning-muted);color:var(--color-warning);border:1px solid var(--color-warning)}.auth-viewport{min-height:100%;display:flex;align-items:center;justify-content:center;padding:var(--space-lg);background:var(--color-background)}.auth-card{width:100%;max-width:420px}.shell{display:grid;grid-template-columns:var(--layout-sidebar-width) 1fr;min-height:100%}.shell-sidebar{background:var(--color-surface);border-right:1px solid var(--color-border);padding:var(--space-md);display:flex;flex-direction:column;gap:var(--space-xs);position:sticky;top:0;height:100vh}.shell-content{padding:var(--space-xl);max-width:var(--layout-content-max-width);width:100%;margin:0 auto}.nav-item{display:flex;align-items:center;gap:var(--space-sm);padding:10px var(--space-md);border-radius:var(--radius-md);color:var(--color-text-secondary);font-weight:var(--type-weight-medium);cursor:pointer;border:none;background:none;text-align:left;width:100%;font-size:var(--type-body)}.nav-item:hover{background:var(--color-surface-alt);text-decoration:none}.nav-item.active{background:var(--color-primary-muted);color:var(--color-primary);font-weight:var(--type-weight-semibold)}.shell-topnav{display:none}.table{width:100%;border-collapse:collapse;font-size:var(--type-body)}.table th{text-align:left;font-size:var(--type-label);font-weight:var(--type-weight-semibold);color:var(--color-text-secondary);padding:var(--space-sm) var(--space-md);border-bottom:1px solid var(--color-border)}.table td{padding:var(--space-sm) var(--space-md);border-bottom:1px solid var(--color-border)}.skeleton{background:linear-gradient(90deg,var(--color-skeleton) 25%,var(--color-surface-alt) 37%,var(--color-skeleton) 63%);background-size:400% 100%;animation:shimmer 1.4s ease infinite;border-radius:var(--radius-sm)}@keyframes shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}.dropzone{border:2px dashed var(--color-border-strong);border-radius:var(--radius-lg);padding:var(--space-xl);text-align:center;color:var(--color-text-secondary);background:var(--color-surface-alt);cursor:pointer;transition:border-color .12s,background .12s}.dropzone.drag{border-color:var(--color-primary);background:var(--color-primary-muted)}.title{font-size:var(--type-title);font-weight:var(--type-weight-bold);line-height:var(--type-line-tight)}.display{font-size:var(--type-display);font-weight:var(--type-weight-bold);line-height:var(--type-line-tight)}.headline{font-size:var(--type-headline);font-weight:var(--type-weight-semibold)}.subhead{font-size:var(--type-subhead);font-weight:var(--type-weight-semibold)}.muted{color:var(--color-text-muted)}.secondary{color:var(--color-text-secondary)}.caption{font-size:var(--type-caption);color:var(--color-text-muted)}.label-sm{font-size:var(--type-label);color:var(--color-text-secondary)}.mono{font-family:var(--type-font-family-mono)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--color-overlay);display:flex;align-items:center;justify-content:center;padding:var(--space-lg);z-index:50}.modal-card{width:100%;max-width:520px;max-height:90vh;overflow:auto}.chips-input{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-xs);padding:6px 8px;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface)}.chips-input:focus-within{border-color:var(--color-primary)}.chips-input-field{flex:1;min-width:120px;border:none;outline:none;background:transparent;color:var(--color-text-primary);font:inherit;padding:4px}.chip{display:inline-flex;align-items:center;gap:6px;padding:3px 6px 3px 10px;border-radius:var(--radius-pill);background:var(--color-primary-muted);color:var(--color-primary);font-size:var(--type-label);white-space:nowrap}.chip-remove{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;padding:0;border:none;border-radius:var(--radius-pill);background:transparent;color:inherit;cursor:pointer;line-height:1;font-size:11px}.chip-remove:hover{background:var(--color-primary);color:var(--color-on-primary)}.state-select-trigger{width:100%;display:flex;align-items:center;justify-content:space-between}.state-select-panel{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:60;display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-sm);max-height:280px;box-shadow:var(--shadow-md, var(--shadow-sm))}.state-select-list{overflow-y:auto;display:flex;flex-direction:column}.state-select-option{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);width:100%;padding:8px 10px;border:none;border-radius:var(--radius-sm);background:transparent;color:var(--color-text-primary);font:inherit;text-align:left;cursor:pointer}.state-select-option:hover{background:var(--color-surface-alt)}.state-select-option.is-selected{background:var(--color-primary-muted);color:var(--color-primary)}.state-select-empty{padding:8px 10px}.state-multiselect-chips{display:flex;flex-wrap:wrap;gap:var(--space-xs);min-height:28px;margin-bottom:var(--space-sm)}.coverage-map{width:100%;height:360px;border-radius:var(--radius-md);overflow:hidden;background:var(--color-surface-alt)}.coverage-map .leaflet-container{width:100%;height:100%;background:var(--color-surface-alt)}.progress-track{height:6px;background:var(--color-surface-alt);border-radius:var(--radius-pill);overflow:hidden}.progress-fill{height:100%;background:var(--color-primary);transition:width .2s ease}input[type=range]{width:100%;accent-color:var(--color-primary)}.gauge{position:relative;width:140px;height:140px}@media (max-width: 1023px){.shell{grid-template-columns:1fr}.shell-sidebar{display:none}.shell-topnav{display:flex;gap:var(--space-xs);overflow-x:auto;padding:var(--space-sm) var(--space-md);background:var(--color-surface);border-bottom:1px solid var(--color-border);position:sticky;top:0;z-index:10}.shell-topnav .nav-item{width:auto;white-space:nowrap}.shell-content{padding:var(--space-md)}}.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-md)}@media (max-width: 640px){.grid-2{grid-template-columns:1fr}}
