*{box-sizing:border-box}body{margin:0;font-family:system-ui,-apple-system,sans-serif;background:#f5f5f5;color:#333}a{color:#1e3a5f}input,textarea,select,button{font:inherit;max-width:100%}button{cursor:pointer}.container{width:100%;max-width:1200px;margin:0 auto;padding:1rem}.card{background:#fff;border-radius:8px;padding:1rem;margin-bottom:1rem;border:1px solid #ddd;overflow:hidden}.btn{padding:.5rem 1rem;border:none;border-radius:6px;background:#1e3a5f;color:#fff}.btn:disabled{opacity:.6;cursor:not-allowed}.btn-secondary{background:#6c757d}.btn-success{background:#28a745}.btn-warning{background:#f0ad4e;color:#000}.form-group{margin-bottom:1rem}.form-group label{display:block;margin-bottom:.25rem;font-weight:500}.form-group input,.form-group textarea,.form-group select{width:100%;padding:.5rem;border:1px solid #ccc;border-radius:4px}.nav{display:flex;gap:.5rem;flex-wrap:wrap;padding:.5rem 0;border-bottom:1px solid #ddd;margin-bottom:1rem}.nav a{padding:.5rem;text-decoration:none;color:#1e3a5f}.nav a.active{font-weight:700}.sla-ok{color:#28a745}.sla-warn{color:#f0ad4e}.sla-breach{color:#dc3545}.table-wrap{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain}.data-table{width:100%;min-width:700px;border-collapse:collapse}.data-table th,.data-table td{padding:.5rem;border-bottom:1px solid #eee;text-align:left;vertical-align:top}.data-table thead tr{border-bottom:1px solid #ddd}.filters-row{margin-bottom:.75rem;display:flex;gap:.5rem;align-items:center;flex-wrap:wrap}.filters-row input[type=text]{min-width:0;flex:1 1 160px}.filters-row label{display:inline-flex;flex-wrap:wrap;align-items:center;gap:.25rem}.filters-meta{font-size:.9rem;color:#555}.pagination-row{margin-top:.5rem;display:flex;gap:.5rem;align-items:center;flex-wrap:wrap}.pagination-meta{font-size:.9rem}.dashboard-filters-row{display:flex;gap:1rem;flex-wrap:wrap;align-items:flex-end}.chart-shell{width:100%}.chart-shell-sm{height:280px}.chart-shell-md{height:300px}.chart-shell-lg{height:320px}.mode-toggle-row,.wizard-nav-row,.inline-controls-row{display:flex;gap:.5rem;flex-wrap:wrap}.app-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:.75rem;margin-bottom:.5rem}.app-header-brand{display:flex;gap:.65rem;align-items:flex-start;flex:1 1 180px;min-width:0}.app-header-titles{min-width:0;flex:1}.app-header-title{display:block;color:#1e3a5f;font-size:clamp(.95rem,3.5vw,1.1rem);line-height:1.25}.app-header-user{display:flex;align-items:center;gap:.45rem;margin-top:.35rem;font-size:.85rem;color:#444}.app-header-avatar{width:26px;height:26px;border-radius:50%;object-fit:cover;border:1px solid #ccc;flex-shrink:0}.app-header-user-text{word-break:break-word}.brand-logo{width:min(100px,22vw);height:auto;border-radius:4px;flex-shrink:0}.app-header-toolbar{display:flex;align-items:center;justify-content:flex-end;gap:.5rem;flex-wrap:wrap;flex-shrink:0;margin-left:auto}.btn-logout{white-space:nowrap}.notification-bell-wrap{position:relative;z-index:1}.notification-bell-btn{position:relative;background:#fff;border:1px solid #ccc;border-radius:8px;padding:.45rem .55rem;line-height:1;min-width:2.5rem;min-height:2.5rem;display:inline-flex;align-items:center;justify-content:center}.notification-bell-icon{font-size:1.2rem}.notification-bell-badge{position:absolute;top:-4px;right:-4px;min-width:1.1rem;height:1.1rem;padding:0 4px;font-size:.65rem;font-weight:700;line-height:1.1rem;text-align:center;background:#dc3545;color:#fff;border-radius:999px}.notification-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:10040;margin:0;padding:0;border:none;background:#00000059;cursor:pointer;-webkit-tap-highlight-color:transparent}@media (min-width: 641px){.notification-backdrop{display:none!important}}.notification-dropdown{position:absolute;right:0;top:calc(100% + 6px);width:min(100vw - 2rem,360px);max-height:min(70vh,520px);display:flex;flex-direction:column;z-index:10050;margin:0;padding:.75rem .85rem;background:#fff;border:1px solid #ddd;border-radius:10px;box-shadow:0 8px 28px #0000002e;overflow:hidden}.notification-dropdown-head{display:flex;justify-content:space-between;align-items:center;gap:.5rem;padding-bottom:.5rem;border-bottom:1px solid #eee;margin-bottom:.5rem;flex-shrink:0}.btn-link{background:none;border:none;color:#1e3a5f;text-decoration:underline;cursor:pointer;font:inherit;padding:0}.notification-list{overflow-y:auto;flex:1;min-height:0;max-height:min(52vh,420px);-webkit-overflow-scrolling:touch}.notification-empty{padding:.75rem;color:#666;font-size:.9rem}.notification-item{display:flex;gap:.5rem;justify-content:space-between;align-items:flex-start;padding:.5rem 0;border-bottom:1px solid #f0f0f0;font-size:.9rem}.notification-item.unread{background:#f8fbff;margin:0 -.5rem;padding-left:.5rem;padding-right:.5rem;border-radius:6px}.notification-title{font-weight:600;color:#1e3a5f}.notification-body{color:#444;margin-top:.25rem;word-break:break-word}.notification-meta{font-size:.75rem;color:#888;margin-top:.25rem}.notification-item-actions{display:flex;flex-direction:column;gap:.25rem;align-items:flex-end;flex-shrink:0}.notification-item-actions a{font-size:.85rem}@media (max-width: 640px){.notification-backdrop{background:#00000073}.notification-dropdown{position:fixed;left:.65rem;right:.65rem;top:max(.75rem,env(safe-area-inset-top,0px));width:auto;max-width:none;max-height:min(calc(100dvh - 1.5rem),85vh);padding-top:max(.75rem,env(safe-area-inset-top,0px))}.notification-list{max-height:min(65dvh,560px)}.notification-item{flex-direction:column;align-items:stretch}.notification-item-actions{flex-direction:row;flex-wrap:wrap;align-items:center;justify-content:flex-start;gap:.5rem}}.install-card{background:#eef5ff;border-color:#c7d7f7;margin-bottom:.75rem}.install-row{display:flex;gap:.75rem;align-items:center;justify-content:space-between;flex-wrap:wrap}.install-row-ios{align-items:flex-start}.install-ios-copy{flex:1 1 220px;min-width:0}.install-ios-steps{margin:.5rem 0 0;font-size:.9rem;color:#35537a;line-height:1.45}.install-actions{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap}.masters-cell-actions-inner{display:flex;flex-wrap:wrap;gap:.35rem;align-items:center}@media (min-width: 577px){.masters-sort-hint{display:none}}@media (max-width: 768px){.container,.card{padding:.75rem}.form-group .btn{width:100%}.dashboard-filters-row>label{width:100%}.dashboard-filters-row>.btn{width:auto}.inline-controls-row>*{flex:1 1 160px;min-width:0}.chart-shell-sm{height:240px}.chart-shell-md{height:250px}.chart-shell-lg{height:280px}.filters-row{flex-direction:column;align-items:stretch}.filters-row label,.filters-row input,.filters-row select{width:100%}.filters-row input[type=text]{flex:none}.pagination-row{flex-direction:column;align-items:stretch}.pagination-row .btn{width:100%}}@media (max-width: 576px){.app-header{flex-direction:column;align-items:stretch}.app-header-toolbar{width:100%;margin-left:0;justify-content:flex-end;padding-top:.25rem;border-top:1px solid #e5e5e5}.nav{flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;gap:.35rem;padding-bottom:.35rem;scrollbar-width:thin}.nav a{flex:0 0 auto;white-space:nowrap;padding:.45rem .65rem;border-radius:6px;background:#fff;border:1px solid #ddd}.nav a.active{background:#e8eef5;border-color:#1e3a5f}.data-table--responsive{min-width:0!important;width:100%}.data-table--responsive thead{display:none}.data-table--responsive tbody tr{display:block;border:1px solid #ddd;border-radius:10px;margin-bottom:.75rem;padding:.5rem .65rem;background:#fafafa}.data-table--responsive tbody td{display:grid;grid-template-columns:minmax(88px,38%) 1fr;gap:.25rem .65rem;align-items:start;padding:.45rem 0;border:none;border-bottom:1px solid #e8e8e8;font-size:.9rem}.data-table--responsive tbody td:last-child{border-bottom:none}.data-table--responsive tbody td:before{content:attr(data-label);font-weight:600;color:#555;font-size:.75rem;text-transform:uppercase;letter-spacing:.02em}.hide-sm{display:none}.pagination-row .btn{width:auto}.install-actions{width:100%}.install-actions .btn{flex:1 1 140px}.masters-table{min-width:0!important;width:100%;border-collapse:collapse}.masters-table thead{display:none}.masters-table tbody tr.masters-row-view,.masters-table tbody tr.masters-row-edit{display:block;border:1px solid #ddd;border-radius:10px;margin-bottom:.75rem;padding:.5rem .65rem;background:#fafafa}.masters-table tbody tr.masters-row-edit{background:#f0f5fb}.masters-table tbody tr.masters-row-view td,.masters-table tbody tr.masters-row-edit td{display:block;padding:.4rem 0;border:none;border-bottom:1px solid #e8e8e8;font-size:.9rem;text-align:left;vertical-align:top}.masters-table tbody tr.masters-row-view td:last-child,.masters-table tbody tr.masters-row-edit td:last-child{border-bottom:none;padding-bottom:0}.masters-table tbody tr.masters-row-view td:before,.masters-table tbody tr.masters-row-edit td:before{content:attr(data-label);display:block;font-weight:600;color:#555;font-size:.72rem;text-transform:uppercase;letter-spacing:.02em;margin-bottom:.3rem}.masters-table tbody tr.masters-row-edit td input,.masters-table tbody tr.masters-row-edit td select{width:100%;max-width:100%;box-sizing:border-box}.masters-table tbody tr.masters-row-edit td.masters-cell-latlng input{display:block;width:100%;margin-bottom:.35rem}.masters-table tbody tr.masters-row-edit td.masters-cell-latlng input:last-child{margin-bottom:0}.masters-cell-actions{display:flex;flex-wrap:wrap;gap:.35rem;align-items:center}.masters-table tbody tr.masters-row-view td.masters-cell-actions,.masters-table tbody tr.masters-row-edit td.masters-cell-actions{display:block}.masters-table tbody tr.masters-row-view td.masters-cell-actions:before,.masters-table tbody tr.masters-row-edit td.masters-cell-actions:before{margin-bottom:.4rem}.masters-table tbody tr.masters-row-view td.masters-cell-actions .masters-cell-actions-inner,.masters-table tbody tr.masters-row-edit td.masters-cell-actions .masters-cell-actions-inner{display:flex;flex-direction:column;gap:.35rem;width:100%}.masters-table tbody tr.masters-row-view td.masters-cell-actions .btn,.masters-table tbody tr.masters-row-edit td.masters-cell-actions .btn{width:100%}}
