a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{border:0;font-size:100%;font:inherit;margin:0;padding:0;vertical-align:initial}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}table{border-collapse:collapse;border-spacing:0}:root{--color-bg:#dce8f5;--color-sidebar:#1b2d4f;--color-sidebar-icon:#5a7aa8;--color-panel:#fff;--color-accent:#57c8e8;--color-accent-dark:#3ab0d0;--color-progress-bg:#dde6f0;--color-text-primary:#1b2d4f;--color-text-secondary:#8494ae;--color-text-muted:#b0bdd0;--color-tab-active:#57c8e8;--color-border:#e8eef6;--color-flag-green:#00c9a7;--color-flag-red:#f05252;--color-blob-blue:#4e6d8c;--color-blob-teal:#57c8e8;--font-family:"Segoe UI",system-ui,-apple-system,sans-serif;--radius-panel:16px;--radius-btn:50%;--sidebar-w:72px;--shadow-panel:0 8px 40px #1e3c641a;--font-sans:var(--font-family)}.sidebar{padding:20px 0}.sidebar__logo{margin-bottom:48px}.nav-item svg{stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.panel-header{padding:18px 28px 14px}.breadcrumb{align-items:center;color:var(--color-text-secondary);display:flex;font-size:13px;gap:6px}.breadcrumb__sep{color:var(--color-text-muted)}.breadcrumb__item{color:var(--color-text-secondary)}.breadcrumb__item:last-child{color:var(--color-text-primary);font-weight:600}.btn-add{align-items:center;background:#0000;border:1.8px solid var(--color-accent);border-radius:50%;color:var(--color-accent);cursor:pointer;display:flex;flex-shrink:0;height:32px;justify-content:center;width:32px}.btn-add svg{fill:none;stroke:currentColor;stroke-width:2.4;stroke-linecap:round;height:16px;width:16px}.tab-nav{border-bottom:1px solid var(--color-border);gap:0;padding:0 24px}.tab,.tab-nav{align-items:center;display:flex}.tab{border-bottom:2.5px solid #0000;color:var(--color-text-secondary);cursor:pointer;font-size:13px;gap:6px;padding:13px 16px 11px;text-decoration:none;transition:color .2s,border-color .2s;white-space:nowrap}.tab:hover{color:var(--color-text-primary)}.tab.tab--active{border-bottom-color:var(--color-tab-active);color:var(--color-tab-active);font-weight:600}.tab svg{fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;height:14px;width:14px}.chip-selector-wrap{align-items:center;border-bottom:1px solid var(--color-border);display:flex;gap:8px;padding:14px 28px 12px}.chip-selector-label{color:var(--color-text-muted);font-size:11px;font-weight:700;letter-spacing:.06em;margin-right:4px;text-transform:uppercase}.chip{background:#0000;border:1.8px solid var(--color-border);border-radius:20px;color:var(--color-text-secondary);cursor:pointer;font-family:var(--font-family);font-size:12px;font-weight:700;letter-spacing:.02em;padding:5px 16px;transition:all .18s}.chip:hover{color:var(--color-accent)}.chip.chip--active,.chip:hover{border-color:var(--color-accent)}.chip.chip--active{background:var(--color-accent);color:#fff}.env-filter-label{color:var(--color-text-muted);font-size:11px;font-weight:700;letter-spacing:.07em;margin-right:4px;text-transform:uppercase}.env-filter-btn.active,.env-filter-btn.env-filter-btn--all.active{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.env-filter-btn.env-filter-btn--dev.active{background:#00a080;border-color:#00a080;color:#fff}.env-filter-btn.env-filter-btn--stage.active{background:#b97208;border-color:#b97208;color:#fff}.env-filter-btn.env-filter-btn--prod.active{background:#c0392b;border-color:#c0392b;color:#fff}.tiles-section-title{color:var(--color-text-primary);font-size:15px;font-weight:700;margin-bottom:20px}.tiles-grid{grid-gap:18px;display:grid;gap:18px;grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}.tile{background:#fff;border:1px solid var(--color-border);border-radius:12px;cursor:pointer;padding:18px;transition:box-shadow .2s,transform .2s}.tile:hover{box-shadow:0 6px 28px #1e3c641c;transform:translateY(-2px)}.tile__address{align-items:center;background:var(--color-bg);border-radius:6px;color:var(--color-text-secondary);display:flex;font-family:Courier New,monospace;font-size:11px;gap:6px;line-height:1.4;margin-bottom:14px;padding:5px 10px;word-break:break-all}.tile__address svg{fill:none;stroke:var(--color-text-secondary);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0;height:12px;width:12px}.tile__files{display:flex;flex-direction:column;gap:8px}.tile__file{align-items:center;background:#f4f7fb;border:1px solid var(--color-border);border-radius:8px;display:flex;gap:10px;padding:10px 12px;transition:background .15s}.tile__file:hover{background:#e8f0fa}.tile__file-icon{align-items:center;border-radius:8px;display:flex;flex-shrink:0;height:34px;justify-content:center;width:34px}.tile__file-icon svg{fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;height:17px;width:17px}.tile__file-icon--json{background:#f5f0ff;color:#805ad5}.tile__file-icon--bin{background:#f0f0f2;color:#4a5568}.tile__file-info{flex:1 1;min-width:0}.tile__file-name{color:var(--color-text-primary);font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tile__file-meta{color:var(--color-text-secondary);font-size:11px;margin-top:2px}.tile__file-badge{border-radius:4px;flex-shrink:0;font-size:10px;font-weight:700;padding:2px 6px;text-transform:uppercase}.tile__file-badge--json{background:#f5f0ff;color:#805ad5}.tile__file-badge--bin{background:#f0f0f2;color:#4a5568}.fw-file__meta{margin-top:1px}.fw-url-row{padding:7px 10px}@media (max-width:768px){:root{--sidebar-w:56px}.panel-content{padding:20px 16px}.tiles-grid{grid-template-columns:1fr}.tab{font-size:12px;padding:12px 10px 10px}}@media (max-width:520px){.breadcrumb__item:not(:last-child):not(:first-child),.breadcrumb__sep:not(:last-of-type),.tab span.tab-label{display:none}}*,:after,:before{box-sizing:border-box;margin:0;padding:0}body,html{background:var(--color-bg);color:var(--color-text-primary);font-family:var(--font-family);font-size:14px;height:100%}a{color:inherit;text-decoration:none}button{cursor:pointer}.auth-loader{align-items:center;background:var(--color-bg);display:flex;inset:0;justify-content:center;position:fixed;z-index:9999}.auth-loader__spinner{animation:auth-spin .7s linear infinite;border:3px solid var(--color-progress-bg);border-radius:50%;border-top-color:var(--color-accent);height:40px;width:40px}@keyframes auth-spin{to{transform:rotate(1turn)}}.login-page{background-color:#00142b;background-image:url(/static/media/stagev_wallbox_login_bg.de7af1f191955e5a7183.webp);background-position:50%;background-repeat:no-repeat;background-size:cover;font-family:Segoe UI,system-ui,-apple-system,sans-serif;min-height:100vh;overflow:hidden;position:relative}.login-page .bg-blob{border-radius:50%;filter:blur(100px);pointer-events:none;position:fixed;z-index:0}.login-page .bg-blob--blue{background:#57c8e8;height:580px;left:-160px;opacity:.12;top:-200px;width:580px}.login-page .bg-blob--teal{background:#57c8e8;bottom:-120px;height:420px;opacity:.08;right:-100px;width:420px}.login-page .login-wrapper{justify-content:center;min-height:100vh;padding:24px;position:relative;z-index:1}.login-page .login-card,.login-page .login-wrapper{align-items:center;display:flex;flex-direction:column}.login-page .login-card{backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);background:#ffffff0a;border:1px solid #57c8e82e;border-radius:20px;box-shadow:0 8px 48px #00000073,inset 0 1px 0 #57c8e81f;max-width:380px;padding:48px 40px 40px;width:100%}.login-page .login-logo{display:block;filter:brightness(1.05);height:auto;margin-bottom:26px;max-width:120px;object-fit:contain;width:100%}.login-page .login-title{color:#fff;font-size:20px;font-weight:800;letter-spacing:-.02em;line-height:1.2;margin-bottom:6px;text-align:center}.login-page .login-title span{color:#57c8e8}.login-page .login-version{color:#57c8e873;font-size:11px;font-weight:700;letter-spacing:.1em;margin-bottom:36px;text-align:center;text-transform:uppercase}.login-page .btn-google{align-items:center;background:#ffffff0f;border:1.5px solid #57c8e840;border-radius:10px;color:#e8f6fb;cursor:pointer;display:flex;font-family:inherit;font-size:14px;font-weight:600;gap:10px;justify-content:center;margin-bottom:20px;padding:12px 20px;text-decoration:none;transition:border-color .18s,box-shadow .18s,background .18s;width:100%}.login-page .btn-google:hover{background:#57c8e814;border-color:#57c8e8;box-shadow:0 4px 22px #57c8e833}.login-page .btn-google:active{background:#57c8e824}.login-page .btn-google svg{flex-shrink:0;height:18px;width:18px}.login-page .login-divider{background:#57c8e81f;height:1px;margin-bottom:18px;width:100%}.login-page .login-disclaimer{color:#ffffff47;font-size:11px;line-height:1.65;max-width:280px;text-align:center}.login-page .login-disclaimer a{color:#57c8e899;text-decoration:underline;text-underline-offset:2px}.login-page .login-disclaimer a:hover{color:#57c8e8}.login-error{color:#e53e3e;font-size:.875rem;margin-top:.75rem;text-align:center}.language-selection{align-items:center;display:flex;gap:6px}.lang-btn{align-items:center;background:#0000;border:1px solid #57c8e838;border-radius:6px;color:#57c8e88c;cursor:pointer;display:inline-flex;font-family:inherit;font-size:11px;font-weight:700;justify-content:center;letter-spacing:.06em;line-height:1;padding:5px 10px;transition:border-color .15s,color .15s,background .15s,box-shadow .15s;white-space:nowrap}.lang-btn:hover{background:#57c8e812;border-color:#57c8e88c;color:#57c8e8}.lang-btn--active{background:#57c8e824;border-color:#57c8e8;box-shadow:0 0 8px #57c8e82e;color:#57c8e8}.login-page .language-selection{justify-content:center;margin-bottom:18px}.settings-modal .language-selection{justify-content:flex-start}.page-wrapper{--color-sidebar:#00142b;--color-sidebar-icon:#4a9db8;--color-accent:#57c8e8;--color-accent-dark:#3aafd0;--color-tab-active:#57c8e8;--color-flag-teal:#57c8e8;--color-blob-teal:#57c8e8}.page-wrapper a{color:#57c8e8}.page-wrapper a:hover{color:#3aafd0}.page-wrapper{background:var(--color-bg)}.app-shell,.page-wrapper{display:flex;min-height:100vh}.app-shell{overflow:hidden;width:100%}.sidebar{background:var(--color-sidebar);flex-direction:column;gap:0;padding:24px 0;width:var(--sidebar-w)}.sidebar,.sidebar__logo{align-items:center;display:flex;flex-shrink:0}.sidebar__logo{height:38px;justify-content:center;margin-bottom:88px;margin-top:-10px;width:38px}.sidebar__logo-mark{height:24px;position:relative;width:24px}.sidebar__logo-mark:before{background:conic-gradient(#f4a843 0deg 120deg,#e84c4c 120deg 240deg,#00c9a7 240deg 1turn);border-radius:50%;content:"";inset:0;position:absolute}.sidebar__logo-mark:after{background:#fff;border-radius:50%;content:"";height:10px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:10px}nav.sidebar__nav{flex:1 1;flex-direction:column;gap:20px}.nav-item,nav.sidebar__nav{align-items:center;display:flex}.nav-item{background:#0000;border:none;border-radius:10px;color:var(--color-sidebar-icon);cursor:pointer;height:40px;justify-content:center;transition:background .2s,color .2s;width:40px}.nav-item:hover{background:#ffffff14;color:#fff}.nav-item.nav-item--active{background:#ffffff1f;color:#fff}.nav-item svg{fill:none;stroke:currentColor;strokeWidth:1.7;strokeLinecap:round;strokeLinejoin:round;height:20px;width:20px}.sidebar__avatar-btn{align-items:center;background:none;border:none;border-radius:50%;cursor:pointer;display:flex;justify-content:center;padding:0;transition:opacity .2s}.sidebar__avatar-btn:hover{opacity:.8}.sidebar__avatar{border:2px solid #ffffff26;border-radius:50%;flex-shrink:0;height:38px;overflow:hidden;width:38px}.sidebar__avatar img{height:100%;object-fit:cover;width:100%}main.main-panel{background:var(--color-panel);display:flex;flex:1 1;flex-direction:column;overflow:hidden}.panel-header{align-items:center;border-bottom:1px solid var(--color-border);display:flex;justify-content:space-between;min-height:64px;padding:18px 24px 14px}.panel-content{background:#eef4fb;flex:1 1;overflow-y:auto;padding:28px 32px 20px}.help-btn{align-items:center;background:var(--color-bg);border:none;border-radius:50%;bottom:20px;box-shadow:0 2px 8px #1e3c641f;color:var(--color-text-secondary);cursor:pointer;display:flex;height:36px;justify-content:center;position:fixed;right:24px;width:36px}.help-btn svg{fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;height:20px;width:20px}.main-panel-wrapper{display:flex;flex:1 1;flex-direction:column;overflow:hidden;position:relative}.sidebar__user-top{flex-shrink:0;margin-bottom:20px}.sidebar__user-top .sidebar__avatar{border:2px solid #fff3;border-radius:50%;height:38px;overflow:hidden;width:38px}.sidebar__user-top .sidebar__avatar img{height:100%;object-fit:cover;width:100%}.sidebar__bottom{align-items:center;background:var(--color-sidebar);bottom:0;display:flex;flex-direction:column;gap:18px;left:0;padding:12px 0 16px;position:fixed;width:var(--sidebar-w);z-index:100}.device-tab-nav{align-items:center;background:var(--color-panel);border-bottom:1px solid var(--color-border);display:flex;gap:0;padding:0 24px}.device-tab{align-items:center;background:#0000;border:none;border-bottom:2.5px solid #0000;color:var(--color-text-secondary);cursor:pointer;display:inline-flex;font-family:var(--font-family);font-size:13px;font-weight:500;gap:7px;outline:none;padding:20px 18px 18px;transition:color .2s,border-color .2s;white-space:nowrap}.device-tab:hover{color:var(--color-text-primary)}.device-tab.device-tab--active{border-bottom-color:var(--color-tab-active);color:var(--color-tab-active);font-weight:600}.device-tab svg{fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0;height:15px;width:15px}.devices-search-bar{display:flex;justify-content:center;margin:0 0 24px}.devices-search-bar__box{background:#fff;border-radius:12px;box-shadow:0 1px 4px #1b2d4f14;max-width:700px;padding:8px;width:100%}.devices-search-bar__wrap{align-items:center;display:flex;position:relative;width:100%}.devices-search-bar__icon{color:var(--color-text-secondary);flex-shrink:0;height:22px;left:14px;pointer-events:none;position:absolute;top:50%;transform:translateY(-50%);width:22px}.devices-search-bar__icon svg{fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;display:block;height:22px;width:22px}.devices-search-bar__input{background:#f4f7fb!important;font-size:16px!important;padding:11px 40px!important;width:100%}.env-filter-bar{align-items:center;display:flex;gap:8px;justify-content:space-between;margin-bottom:18px}.env-filter-bar__filters{align-items:center;display:flex;flex-wrap:wrap;gap:8px}.upload-add-btn{align-items:center;background:var(--color-accent);border:none;border-radius:20px;color:#fff;cursor:pointer;display:inline-flex;flex-shrink:0;font-family:var(--font-family);font-size:12px;font-weight:700;gap:6px;letter-spacing:.02em;padding:6px 16px;transition:background .18s,transform .12s}.upload-add-btn:hover{background:var(--color-accent-dark)}.upload-add-btn:active{transform:scale(.96)}.upload-add-btn svg{fill:none;stroke:currentColor;stroke-width:2.5;stroke-linecap:round;height:13px;width:13px}.env-filter-btn{background:#fff;border:1.8px solid var(--color-border);border-radius:20px;color:var(--color-text-secondary);cursor:pointer;font-family:var(--font-family);font-size:12px;font-weight:700;letter-spacing:.02em;padding:5px 16px;transition:all .18s}.env-filter-btn:hover{border-color:var(--color-accent);color:var(--color-accent)}.env-filter-btn.active{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.env-filter-btn--dev.active{background:#00a080;border-color:#00a080;color:#fff}.env-filter-btn--stage.active{background:#b97208;border-color:#b97208;color:#fff}.env-filter-btn--prod.active{background:#c0392b;border-color:#c0392b;color:#fff}.fw-cards-grid{display:flex;flex-direction:column;gap:18px}.fw-card{background:#fff;border:1px solid var(--color-border);border-radius:16px;box-shadow:0 4px 24px #1e3c6412;overflow:hidden}.fw-loading{flex-direction:column;gap:18px;padding:72px 40px 64px}.fw-loading,.fw-loading__graphic{align-items:center;display:flex;justify-content:center}.fw-loading__graphic{height:80px;position:relative;width:80px}.fw-loading__ring{height:100%;inset:0;position:absolute;width:100%}.fw-loading__arc{stroke:var(--color-accent);animation:fw-spin .95s linear infinite;transform-origin:26px 26px}.fw-loading__chip{color:var(--color-accent);height:30px;position:relative;width:30px}.fw-loading__title{color:var(--color-text-primary);font-size:22px;font-weight:700;letter-spacing:-.015em}.fw-loading__sub{color:var(--color-text-secondary);font-size:13px;margin-top:-10px}@keyframes fw-spin{to{transform:rotate(1turn)}}.fw-card__header{align-items:flex-start;border-bottom:1px solid var(--color-border);display:flex;gap:12px;padding:20px 28px 18px}.fw-card__title-group{display:flex;flex-direction:column;gap:4px}.fw-card__title-row{align-items:center;display:flex;gap:8px}.fw-card__title{color:var(--color-text-primary);font-size:16px;font-weight:700}.fw-card__subtitle{color:var(--color-text-secondary);font-size:12px}.env-badge{border-radius:5px;flex-shrink:0;font-size:10px;font-weight:800;letter-spacing:.09em;padding:3px 9px;text-transform:uppercase}.env-badge--dev{background:#e6faf6;color:#00a080}.env-badge--stage{background:#fff6e8;color:#b97208}.env-badge--prod{background:#fef0f0;color:#c0392b}.fw-env-row{grid-gap:12px;align-items:start;display:grid;gap:12px;grid-template-columns:1fr;padding:20px 28px}.fw-env-row:last-child{border-bottom:none}.fw-card__footer{border-top:1px solid var(--color-border);padding:14px 28px}.fw-card__upload-device-btn{align-items:center;background:#0000;border:1.5px solid var(--color-accent);border-radius:8px;color:var(--color-accent);cursor:pointer;display:inline-flex;font-family:var(--font-family);font-size:13px;font-weight:600;gap:7px;justify-content:center;padding:9px 18px;transition:background .18s,color .18s;width:100%}.fw-card__upload-device-btn:hover{background:var(--color-accent);color:#fff}.fw-card__upload-device-btn svg{fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;height:14px;width:14px}.fw-files-col{gap:5px}.fw-files,.fw-files-col{display:flex;flex-direction:column}.fw-files{gap:7px}.fw-file{background:#f4f7fb;border:1px solid var(--color-border);border-radius:8px;gap:10px;padding:8px 12px}.fw-file,.fw-file__icon{align-items:center;display:flex}.fw-file__icon{border-radius:7px;flex-shrink:0;font-size:9px;font-weight:800;height:30px;justify-content:center;letter-spacing:.04em;width:30px}.fw-file__icon--json{background:#f5f0ff;color:#805ad5}.fw-file__icon--bin{background:#e8edf5;color:#4a5568}.fw-file__icon--wfrm{background:#e6f4ea;color:#276749}.fw-file__info{flex:1 1;min-width:0}.fw-file__name{color:var(--color-text-primary);font-size:12px;font-weight:600;line-height:1.5;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fw-file__meta{color:var(--color-text-secondary);font-size:11px;line-height:1.5;margin-top:2px}.fw-url-col{display:flex;flex-direction:column;gap:5px;justify-content:center}.fw-url-label{color:var(--color-text-muted);font-size:10px;font-weight:700;letter-spacing:.07em;text-transform:uppercase}.fw-url-row{align-items:center;background:#f0f4fa;border:1px solid var(--color-border);border-radius:8px;display:flex;gap:6px;padding:9px 10px}.fw-url-badge{background:#dbe9ff;border-radius:4px;color:#2563eb;flex-shrink:0;font-size:9px;font-weight:700;letter-spacing:.06em;padding:2px 5px;text-transform:uppercase}.fw-url-badge--json{background:#d1fae5;color:#059669}.fw-url{color:var(--color-text-secondary);flex:1 1;font-family:Courier New,monospace;font-size:10.5px;line-height:1.6;min-width:0;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:all;user-select:all;white-space:nowrap}a.fw-url{color:#3b82f6;color:var(--color-accent,#3b82f6);cursor:pointer;text-decoration:none}a.fw-url:hover{text-decoration:underline}.btn-copy{align-items:center;background:#0000;border:none;border-radius:6px;color:var(--color-text-secondary);cursor:pointer;display:flex;flex-shrink:0;height:26px;justify-content:center;transition:background .15s,color .15s;width:26px}.btn-copy.copied,.btn-copy:hover{background:var(--color-accent);color:#fff}.btn-copy svg{fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;height:13px;width:13px}.json-modal-overlay{align-items:center;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background:#1b2d4f99;display:flex;inset:0;justify-content:center;opacity:0;padding:24px;pointer-events:none;position:fixed;transition:opacity .18s;z-index:1000}.json-modal-overlay.open{opacity:1;pointer-events:all}.json-modal{background:var(--color-panel);border-radius:var(--radius-panel);box-shadow:0 20px 60px #1b2d4f38;display:flex;flex-direction:column;max-height:80vh;max-width:640px;overflow:hidden;transform:translateY(10px);transition:transform .18s;width:100%}.json-modal-overlay.open .json-modal{transform:translateY(0)}.json-modal-header{border-bottom:1px solid var(--color-border);gap:10px;padding:16px 20px}.json-modal-header,.json-modal-icon{align-items:center;display:flex;flex-shrink:0}.json-modal-icon{background:#f5f0ff;border-radius:7px;color:#805ad5;font-size:8.5px;font-weight:800;height:28px;justify-content:center;letter-spacing:.04em;width:28px}.json-modal-title{flex:1 1;min-width:0}.json-modal-title strong{color:var(--color-text-primary);display:block;font-size:13px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.json-modal-title span{color:var(--color-text-secondary);font-size:11px}.json-modal-close{align-items:center;background:#0000;border:none;border-radius:6px;color:var(--color-text-secondary);cursor:pointer;display:flex;flex-shrink:0;height:28px;justify-content:center;transition:background .15s,color .15s;width:28px}.json-modal-close:hover{background:#f4f7fb;color:var(--color-text-primary)}.json-modal-close svg{fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;height:15px;width:15px}.json-modal-body{flex:1 1;overflow-y:auto;padding:20px}.json-code{background:#f8f7ff;border:1px solid #e8e0ff;border-radius:10px;color:var(--color-text-primary);font-family:Cascadia Code,Fira Code,Consolas,Menlo,monospace;font-size:12.5px;line-height:1.7;margin:0;overflow-x:auto;padding:16px 18px;white-space:pre}.json-key{color:#805ad5}.json-str{color:#2e7d32}.json-num{color:#1565c0}.json-bool,.json-null{color:#c62828}@media (max-width:768px){:root{--sidebar-w:56px}.panel-content{padding:20px 16px 28px}.device-tab-nav,.panel-header{padding-left:16px;padding-right:16px}.device-tab{font-size:12px;padding:12px 10px 10px}.fw-card__header{padding:14px 16px 12px}.fw-env-row{padding:14px 16px}.fw-file{min-width:0;overflow:hidden}.fw-file__name{white-space:normal;word-break:break-all}.fw-url-row{min-width:0;overflow:hidden}.fw-url{white-space:normal;word-break:break-all}.sidebar{align-items:stretch;border-top:1px solid #ffffff17;bottom:0;flex-direction:row;height:60px;left:0;padding:0;position:fixed;right:0;width:100%;z-index:200}.sidebar__logo{display:none}.sidebar__bottom,nav.sidebar__nav{display:contents}.sidebar__bottom>.nav-item,.sidebar__bottom>.sidebar__avatar-btn,.sidebar__nav>.nav-item{align-items:center;border-radius:0;display:flex;flex:1 1;height:100%;justify-content:center;width:auto}.sidebar__bottom>.nav-item[aria-label=Logout]{display:none}.app-shell{padding-bottom:60px}}@media (max-width:480px){.fw-card__header{padding:12px 12px 10px}.fw-env-row{padding:12px}.device-tab-nav,.panel-header{padding-left:16px;padding-right:16px}}.upload-modal-overlay{align-items:center;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background:#1b2d4f99;display:flex;inset:0;justify-content:center;opacity:0;padding:24px;pointer-events:none;position:fixed;transition:opacity .18s;z-index:1000}.upload-modal-overlay.open{opacity:1;pointer-events:all}.upload-modal{background:var(--color-panel);border-radius:var(--radius-panel);box-shadow:0 20px 60px #1b2d4f38;display:flex;flex-direction:column;max-width:460px;overflow:hidden;transform:translateY(10px);transition:transform .18s;width:100%}.upload-modal-overlay.open .upload-modal{transform:translateY(0)}.upload-modal-header{align-items:center;border-bottom:1px solid var(--color-border);display:flex;flex-shrink:0;gap:10px;padding:16px 20px}.upload-modal-header__icon{align-items:center;background:#eef4ff;border-radius:8px;color:var(--color-accent);display:flex;flex-shrink:0;height:32px;justify-content:center;width:32px}.upload-modal-header__icon svg{fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;height:16px;width:16px}.upload-modal-header__title{color:var(--color-text-primary);flex:1 1;font-size:15px;font-weight:700;letter-spacing:-.01em}.upload-modal-close{align-items:center;background:#0000;border:none;border-radius:6px;color:var(--color-text-secondary);cursor:pointer;display:flex;flex-shrink:0;height:28px;justify-content:center;transition:background .15s,color .15s;width:28px}.upload-modal-close:hover{background:#f4f7fb;color:var(--color-text-primary)}.upload-modal-close svg{fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;height:15px;width:15px}.upload-modal-body{gap:20px;padding:24px 20px}.upload-field,.upload-modal-body{display:flex;flex-direction:column}.upload-field{gap:8px}.upload-field__label{color:var(--color-text-muted);font-size:11px;font-weight:700;letter-spacing:.07em;text-transform:uppercase}.upload-ecu-options{display:flex;gap:10px}.upload-ecu-option{align-items:center;background:#f4f7fb;border:1.8px solid var(--color-border);border-radius:10px;color:var(--color-text-secondary);cursor:pointer;display:flex;flex:1 1;font-size:13px;font-weight:700;gap:8px;padding:10px 14px;transition:border-color .15s,background .15s,color .15s;-webkit-user-select:none;user-select:none}.upload-ecu-option:hover{border-color:var(--color-accent);color:var(--color-text-primary)}.upload-ecu-option.selected{background:#eef4ff;border-color:var(--color-accent);color:var(--color-accent)}.upload-ecu-option svg{fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;flex-shrink:0;height:16px;width:16px}.upload-select-wrapper{align-items:center;display:flex;position:relative}.upload-select{appearance:none;-webkit-appearance:none;background:#f4f7fb;border:1.5px solid var(--color-border);border-radius:8px;color:var(--color-text-primary);cursor:pointer;font-family:var(--font-family);font-size:14px;font-weight:600;outline:none;padding:9px 36px 9px 12px;transition:border-color .15s,background .15s;width:100%}.upload-select:focus,.upload-select:hover{border-color:var(--color-accent)}.upload-select:focus{background:#fff}.upload-select-chevron{fill:none;stroke:var(--color-text-secondary);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;height:15px;pointer-events:none;position:absolute;right:10px;width:15px}.upload-text-input{background:#f4f7fb;border:1.5px solid var(--color-border);border-radius:8px;color:var(--color-text-primary);font-family:var(--font-family);font-size:14px;outline:none;padding:9px 12px;transition:border-color .15s,background .15s;width:100%}.upload-text-input:focus,.upload-text-input:hover{border-color:var(--color-accent)}.upload-text-input:focus{background:#fff}.upload-text-input--error{border-color:#e53e3e!important}.upload-field__error{color:#e53e3e;display:block;font-size:12px;font-weight:500;margin-top:4px}.upload-files{display:flex;flex-direction:column;gap:8px}.upload-files-mismatch{align-items:center;background:#fff8e1;border:1.5px solid #f9a825;border-radius:8px;color:#7a5400;display:flex;font-size:12px;gap:6px;line-height:1.4;margin-top:6px;padding:8px 12px}.upload-files-mismatch svg{stroke:#f9a825;flex-shrink:0}.upload-file-zone{align-items:center;background:#f4f7fb;border:1.8px dashed var(--color-border);border-radius:10px;cursor:pointer;display:flex;gap:10px;padding:10px 14px;transition:border-color .15s,background .15s}.upload-file-zone:hover{background:#eef4ff;border-color:var(--color-accent)}.upload-file-zone.has-file{background:#eef4ff;border-color:var(--color-accent);border-style:solid}.upload-file-zone__icon{align-items:center;border-radius:8px;display:flex;flex-shrink:0;font-size:9px;font-weight:800;height:34px;justify-content:center;letter-spacing:.04em;width:34px}.upload-file-zone__icon--bin{background:#e8edf5;color:#4a5568}.upload-file-zone__icon--wfrm{background:#e6f6ef;color:#276749;font-size:8px}.upload-file-zone__icon--json{background:#f5f0ff;color:#805ad5}.upload-file-zone__text{display:flex;flex:1 1;flex-direction:column;gap:2px;min-width:0}.upload-file-zone__prompt{color:var(--color-text-primary);font-size:13px;font-weight:600}.upload-file-zone__hint{color:var(--color-text-secondary);font-size:11px}.upload-file-zone__name{color:var(--color-text-primary);font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.upload-file-zone__size{color:var(--color-text-secondary);font-size:11px}.upload-modal-footer{align-items:center;border-top:1px solid var(--color-border);display:flex;flex-shrink:0;gap:10px;justify-content:flex-end;padding:14px 20px}.upload-cancel-btn{background:#0000;border:1.5px solid var(--color-border);border-radius:8px;color:var(--color-text-secondary);cursor:pointer;font-family:var(--font-family);font-size:13px;font-weight:600;padding:9px 20px;transition:border-color .15s,color .15s}.upload-cancel-btn:hover{border-color:var(--color-text-secondary);color:var(--color-text-primary)}.upload-submit-btn{align-items:center;background:var(--color-accent);border:none;border-radius:8px;color:#fff;cursor:pointer;display:inline-flex;font-family:var(--font-family);font-size:13px;font-weight:600;gap:7px;padding:9px 22px;transition:background .18s,transform .12s,opacity .15s}.upload-submit-btn:hover:not(:disabled){background:var(--color-accent-dark)}.upload-submit-btn:active:not(:disabled){transform:scale(.97)}.upload-submit-btn:disabled{cursor:not-allowed;opacity:.45}.upload-submit-btn svg{fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;height:14px;width:14px}.upload-success-view{align-items:center;display:flex;flex-direction:column;gap:18px;justify-content:center;padding:52px 32px 48px}.upload-success-check{height:80px;width:80px}.upload-success-check__circle{fill:none;stroke:#22c55e;stroke-width:3;stroke-dasharray:189;stroke-dashoffset:189;animation:upload-draw-circle .55s cubic-bezier(.4,0,.2,1) .1s forwards;transform-origin:36px 36px}.upload-success-check__tick{fill:none;stroke:#22c55e;stroke-width:3.2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:58;stroke-dashoffset:58;animation:upload-draw-tick .38s cubic-bezier(.4,0,.2,1) .6s forwards}@keyframes upload-draw-circle{to{stroke-dashoffset:0}}@keyframes upload-draw-tick{to{stroke-dashoffset:0}}.upload-success-label{animation:upload-fade-in .3s ease-out .9s forwards;color:var(--color-text-primary);font-size:16px;font-weight:700;letter-spacing:-.01em;opacity:0}.upload-success-sublabel{animation:upload-fade-in .3s ease-out 1.05s forwards;color:var(--color-text-secondary);font-size:13px;font-weight:400;opacity:0;text-align:center}@keyframes upload-fade-in{to{opacity:1}}.upload-device-modal-overlay{align-items:center;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background:#1b2d4f99;display:flex;inset:0;justify-content:center;opacity:0;padding:24px;pointer-events:none;position:fixed;transition:opacity .18s;z-index:1000}.upload-device-modal-overlay.open{opacity:1;pointer-events:all}.upload-device-modal{background:var(--color-panel);border-radius:var(--radius-panel);box-shadow:0 20px 60px #1b2d4f38;display:flex;flex-direction:column;max-width:400px;transform:translateY(10px);transition:transform .18s;width:100%}.upload-device-modal-overlay.open .upload-device-modal{transform:translateY(0)}.upload-device-modal__header{align-items:center;border-bottom:1px solid var(--color-border);display:flex;flex-shrink:0;justify-content:space-between;padding:16px 20px}.upload-device-modal__title{color:var(--color-text-primary);font-size:15px;font-weight:700;letter-spacing:-.01em}.upload-device-modal__close{align-items:center;background:#0000;border:none;border-radius:6px;color:var(--color-text-secondary);cursor:pointer;display:flex;flex-shrink:0;height:28px;justify-content:center;transition:background .15s,color .15s;width:28px}.upload-device-modal__close:hover{background:#f4f7fb;color:var(--color-text-primary)}.upload-device-modal__close svg{fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;height:15px;width:15px}.upload-device-modal__body{padding:24px 20px}.upload-device-modal__footer{align-items:center;border-top:1px solid var(--color-border);display:flex;flex-shrink:0;gap:10px;justify-content:flex-end;padding:14px 20px}.device-search__input-wrap{align-items:center;display:flex;position:relative}.device-search__input{padding-right:34px;width:100%}.upload-text-input--selected{background:#fff;border-color:var(--color-accent)!important;cursor:default}.device-search__spinner{animation:device-search-spin .65s linear infinite;border:2px solid var(--color-border);border-radius:50%;border-top-color:var(--color-accent);flex-shrink:0;height:15px;pointer-events:none;position:absolute;right:10px;top:50%;transform:translateY(-50%);width:15px}@keyframes device-search-spin{to{transform:translateY(-50%) rotate(1turn)}}.device-search__clear{align-items:center;background:#0000;border:none;border-radius:4px;color:var(--color-text-secondary);cursor:pointer;display:flex;flex-shrink:0;height:20px;justify-content:center;padding:0;position:absolute;right:8px;top:50%;transform:translateY(-50%);transition:color .15s;width:20px}.device-search__clear:hover{color:var(--color-text-primary)}.device-search__clear svg{fill:none;stroke:currentColor;stroke-width:2.5;stroke-linecap:round;height:13px;width:13px}.device-search__dropdown{background:var(--color-panel);border:1.5px solid var(--color-accent);border-radius:8px;box-shadow:0 8px 24px #1b2d4f24;left:0;list-style:none;margin:0;max-height:220px;overflow-y:auto;padding:4px 0;position:absolute;right:0;top:calc(100% + 4px);z-index:200}.device-search__dropdown-item{align-items:baseline;cursor:pointer;display:flex;gap:10px;padding:9px 14px;transition:background .12s}.device-search__dropdown-item:hover{background:#f4f7fb}.device-search__item-name{color:var(--color-text-primary);flex:1 1 auto;font-size:13px;font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.device-search__item-serial{color:var(--color-text-secondary);flex-shrink:0;font-family:monospace;font-size:12px}.device-search__dropdown-empty{color:var(--color-text-secondary);font-size:13px;padding:10px 14px;text-align:center}.upload-field__hint{color:var(--color-text-secondary);display:block;font-size:12px;margin-top:4px}.upload-device-modal__body .upload-field{position:relative}.settings-modal-overlay{align-items:center;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background:#1b2d4f99;display:flex;inset:0;justify-content:center;opacity:0;padding:24px;pointer-events:none;position:fixed;transition:opacity .18s;z-index:1000}.settings-modal-overlay.open{opacity:1;pointer-events:all}.settings-modal{background:var(--color-panel);border-radius:var(--radius-panel);box-shadow:0 20px 60px #1b2d4f38;display:flex;flex-direction:column;max-width:400px;overflow:hidden;transform:translateY(10px);transition:transform .18s;width:100%}.settings-modal-overlay.open .settings-modal{transform:translateY(0)}.settings-modal-header{align-items:center;border-bottom:1px solid var(--color-border);display:flex;flex-shrink:0;justify-content:space-between;padding:16px 20px}.settings-modal-title{color:var(--color-text-primary);font-size:15px;font-weight:700;letter-spacing:-.01em}.settings-modal-close{align-items:center;background:#0000;border:none;border-radius:6px;color:var(--color-text-secondary);cursor:pointer;display:flex;flex-shrink:0;height:28px;justify-content:center;transition:background .15s,color .15s;width:28px}.settings-modal-close:hover{background:#f4f7fb;color:var(--color-text-primary)}.settings-modal-close svg{fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;height:15px;width:15px}.settings-modal-body{display:flex;flex:1 1;flex-direction:column;gap:20px;padding:24px 20px}.settings-field{align-items:center;display:flex;flex-direction:column;gap:8px}.settings-field__label{color:var(--color-text-muted);font-size:12px;font-weight:700;letter-spacing:.07em;text-transform:uppercase}.settings-select-wrapper{align-items:center;display:flex;position:relative}.settings-select{appearance:none;-webkit-appearance:none;background:#f4f7fb;border:1.5px solid var(--color-border);border-radius:8px;color:var(--color-text-primary);cursor:pointer;font-family:var(--font-family);font-size:14px;font-weight:500;outline:none;padding:9px 36px 9px 12px;transition:border-color .15s,background .15s;width:100%}.settings-select:focus,.settings-select:hover{border-color:var(--color-accent)}.settings-select:focus{background:#fff}.settings-select-chevron{fill:none;stroke:var(--color-text-secondary);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;height:15px;pointer-events:none;position:absolute;right:10px;width:15px}.settings-about{align-items:center;background:#f4f7fb;border:1.5px solid var(--color-border);border-radius:10px;display:flex;justify-content:space-between;margin-top:4px;padding:10px 14px}.settings-about__label{color:var(--color-text-muted);font-size:12px;font-weight:700;letter-spacing:.07em;text-transform:uppercase}.settings-about__badge{color:var(--color-accent);font-family:Cascadia Code,Fira Code,Consolas,monospace;font-size:12px;font-weight:700;letter-spacing:.02em;padding:3px 9px}.settings-modal-footer{align-items:center;border-top:1px solid var(--color-border);display:flex;flex-shrink:0;justify-content:flex-end;padding:14px 20px}.settings-apply-btn{background:var(--color-accent);border:none;border-radius:8px;color:#fff;cursor:pointer;font-family:var(--font-family);font-size:13px;font-weight:600;padding:9px 22px;transition:background .18s,transform .12s}.settings-apply-btn:hover{background:var(--color-accent-dark)}.settings-apply-btn:active{transform:scale(.97)}.settings-profile{align-items:center;display:flex;flex-direction:column;gap:6px;padding:4px 0 8px}.settings-profile__avatar{border:2px solid var(--color-border);border-radius:50%;flex-shrink:0;height:72px;object-fit:cover;width:72px}.settings-profile__name{color:var(--color-text-primary);font-size:15px;font-weight:700;letter-spacing:-.01em;text-align:center}.settings-profile__email{color:var(--color-text-secondary);font-size:11px;font-weight:400;text-align:center;word-break:break-all}.settings-profile__role{align-items:center;border-radius:20px;display:inline-flex;font-size:11px;font-weight:700;gap:4px;letter-spacing:.02em;padding:2px 8px}.settings-profile__role svg{flex-shrink:0;height:11px;width:11px}.settings-profile__logout-btn{align-items:center;background:#0000;border:1.5px solid var(--color-border);border-radius:7px;color:var(--color-text-secondary);cursor:pointer;display:inline-flex;font-family:var(--font-family);font-size:11px;font-weight:600;gap:5px;margin-top:12px;padding:5px 13px;transition:background .15s,border-color .15s,color .15s}.settings-profile__logout-btn svg{flex-shrink:0;height:12px;width:12px}.settings-profile__logout-btn:hover{background:#fff0f0;border-color:#e53e3e;color:#e53e3e}.avatar-fallback{align-items:center;background:var(--color-accent);border-radius:50%;color:#fff;display:flex;flex-shrink:0;font-family:var(--font-family);font-weight:700;justify-content:center;line-height:1;-webkit-user-select:none;user-select:none}.avatar-fallback--sm{font-size:15px;height:100%;width:100%}.avatar-fallback--lg{font-size:28px;height:72px;width:72px}.hist-section{display:flex;flex-direction:column;gap:20px}.hist-header{align-items:center;display:flex;justify-content:space-between}.hist-header__left{align-items:center;display:flex;gap:8px}.hist-header__icon{fill:none;stroke:var(--color-text-secondary);stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0;height:18px;width:18px}.hist-header__title{color:var(--color-text-primary);font-size:15px;font-weight:700;letter-spacing:-.01em}.hist-header__count{background:var(--color-border);border-radius:10px;display:inline-flex;font-size:11px;font-weight:700;height:20px;min-width:22px;padding:0 6px}.hist-header__count,.hist-loading{align-items:center;color:var(--color-text-secondary);justify-content:center}.hist-loading{display:flex;font-size:13px;gap:10px;padding:40px 24px}.hist-loading__spinner{animation:fw-spin .8s linear infinite;border:2.5px solid var(--color-border);border-radius:50%;border-top-color:var(--color-accent);flex-shrink:0;height:18px;width:18px}.hist-empty{align-items:center;color:var(--color-text-secondary);display:flex;flex-direction:column;font-size:13px;gap:14px;justify-content:center;padding:60px 24px;text-align:center}.hist-empty svg{fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round;height:48px;opacity:.55;width:48px}.hist-timeline{gap:22px}.hist-day,.hist-timeline{display:flex;flex-direction:column}.hist-day{gap:10px}.hist-day__heading{align-items:center;display:flex;gap:10px}.hist-day__pill{align-items:center;background:#dde8f4;border-radius:20px;color:#3a5a7c;display:inline-flex;font-size:11px;font-weight:700;letter-spacing:.03em;padding:3px 12px;white-space:nowrap}.hist-day__cards{display:flex;flex-direction:column;gap:8px}.hist-card{align-items:center;background:#fff;border:1px solid var(--color-border);border-radius:12px;box-shadow:0 1px 6px #1e3c640d;display:flex;gap:14px;padding:12px 18px;transition:box-shadow .18s}.hist-card:hover{box-shadow:0 3px 14px #1e3c641a}.hist-card__identity{align-items:center;display:flex;flex-shrink:0;gap:10px}.hist-card__avatar-wrap{border-radius:50%;flex-shrink:0;height:38px;overflow:hidden;width:38px}.hist-card__avatar{border-radius:50%;display:block;height:38px;object-fit:cover;width:38px}.hist-card__avatar--fallback{align-items:center;background:var(--color-accent);border-radius:50%;color:#fff;display:flex;flex-shrink:0;font-family:var(--font-family);font-size:14px;font-weight:700;height:38px;justify-content:center;line-height:1;-webkit-user-select:none;user-select:none;width:38px}.hist-card__user{display:flex;flex-direction:column;gap:2px;max-width:180px;min-width:130px}.hist-card__user-name{color:var(--color-text-primary);font-size:12px;font-weight:600}.hist-card__user-email,.hist-card__user-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hist-card__user-email{color:#8492a6;color:var(--color-text-muted,#8492a6);font-size:11px}.hist-card__divider{background:var(--color-border);flex-shrink:0;height:30px;width:1px}.hist-card__fw{display:flex;flex:1 1;flex-direction:column;gap:2px;min-width:0}.hist-card__fw-title-row{align-items:baseline;display:flex;gap:7px;min-width:0}.hist-card__fw-title{color:var(--color-text-primary);font-size:13px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hist-card__fw .env-badge{background:#0000;border:1px solid;border-radius:4px;flex-shrink:0;font-size:9px;font-weight:700;letter-spacing:.08em;opacity:.85;padding:1px 6px;position:relative;top:-2px;vertical-align:initial}.hist-card__fw-mcu{color:var(--color-text-secondary);font-family:Courier New,monospace;font-size:11px;white-space:nowrap}@media (max-width:520px){.hist-card{grid-gap:10px 8px;align-items:center;display:grid;gap:10px 8px;grid-template-areas:"identity" "fw";grid-template-columns:1fr;padding:14px 16px}.hist-card__identity{grid-area:identity;min-width:0}.hist-card__identity .hist-card__user{max-width:none;min-width:0}.hist-card__divider{display:none}.hist-card__fw{border-top:1px solid var(--color-border);grid-area:fw;padding-top:8px}.hist-card__fw-title{font-size:14px;white-space:normal;word-break:break-word}.hist-card__fw-mcu{font-size:12px;margin-top:2px}}.users-grid{grid-gap:16px;display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(280px,1fr))}.user-card{background:#fff;border:1px solid var(--color-border);border-radius:14px;box-shadow:0 1px 4px #1e3c640f;display:flex;flex-direction:column;gap:14px;padding:20px;position:relative;transition:box-shadow .15s}.user-card:hover{box-shadow:0 4px 16px #1e3c641c}.user-card__top{align-items:center;display:flex;gap:14px}.user-card__avatar-wrap{border:2px solid var(--color-border);border-radius:50%;flex-shrink:0;height:52px;overflow:hidden;width:52px}.user-card__avatar-wrap img{height:100%;object-fit:cover;width:100%}.user-card__avatar-fallback{align-items:center;background:var(--color-accent);border-radius:50%;color:#fff;display:flex;flex-shrink:0;font-size:20px;font-weight:700;height:52px;justify-content:center;-webkit-user-select:none;user-select:none;width:52px}.user-card__identity{display:flex;flex:1 1;flex-direction:column;gap:2px;min-width:0}.user-card__name{color:var(--color-text-primary);font-size:14px;font-weight:700}.user-card__email,.user-card__name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-card__email{color:var(--color-text-secondary);font-size:12px}.user-card__role{align-items:center;align-self:flex-start;border-radius:20px;display:inline-flex;font-size:11px;font-weight:700;gap:4px;letter-spacing:.02em;margin-top:4px;padding:2px 8px}.user-card__role--admin{background:#fff3e0;color:#b85c00}.user-card__role--user{background:#e8f5e9;color:#2e7d32}.user-card__role--superuser{background:#ede7f6;color:#5b21b6}.user-card__role svg{flex-shrink:0;height:11px;width:11px}.user-card__meta{border-top:1px solid var(--color-border);display:flex;flex-direction:column;gap:4px;padding-top:10px}.user-card__meta-row{align-items:center;color:var(--color-text-secondary);display:flex;font-size:11px;gap:5px}.user-card__meta-row svg{stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0;height:11px;width:11px}.user-card__meta-label{font-weight:600;min-width:52px}.user-card__edit-btn{align-items:center;background:#0000;border:1px solid var(--color-border);border-radius:8px;color:var(--color-text-secondary);cursor:pointer;display:flex;height:30px;justify-content:center;position:absolute;right:14px;top:14px;transition:background .15s,color .15s,border-color .15s;width:30px}.user-card__edit-btn svg{fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;height:14px;width:14px}.user-card__edit-btn:hover{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.users-loading{align-items:center;color:var(--color-text-secondary);display:flex;font-size:14px;gap:10px;justify-content:center;padding:60px 0}.users-loading__spinner{animation:spin .7s linear infinite;border:2px solid var(--color-border);border-radius:50%;border-top-color:var(--color-accent);height:20px;width:20px}@keyframes spin{to{transform:rotate(1turn)}}.users-empty{align-items:center;color:var(--color-text-secondary);display:flex;flex-direction:column;font-size:13px;gap:14px;justify-content:center;padding:60px 24px;text-align:center}.users-empty svg{fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round;height:48px;opacity:.55;width:48px}.edit-user-modal-overlay{align-items:center;background:#00142b8c;display:flex;inset:0;justify-content:center;opacity:0;padding:16px;pointer-events:none;position:fixed;transition:opacity .2s;z-index:1000}.edit-user-modal-overlay.open{opacity:1;pointer-events:auto}.edit-user-modal{background:#fff;border-radius:16px;box-shadow:0 8px 40px #00142b2e;display:flex;flex-direction:column;max-width:420px;overflow:hidden;transform:translateY(-8px) scale(.98);transition:transform .2s;width:100%}.edit-user-modal-overlay.open .edit-user-modal{transform:translateY(0) scale(1)}.edit-user-modal__header{align-items:center;border-bottom:1px solid var(--color-border);display:flex;gap:12px;padding:18px 20px 14px}.edit-user-modal__header-icon{align-items:center;background:var(--color-accent);border-radius:8px;display:flex;flex-shrink:0;height:32px;justify-content:center;width:32px}.edit-user-modal__header-icon svg{fill:none;stroke:#fff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;height:16px;width:16px}.edit-user-modal__title{color:var(--color-text-primary);flex:1 1;font-size:15px;font-weight:700}.edit-user-modal__close{align-items:center;background:none;border:none;border-radius:6px;color:var(--color-text-secondary);cursor:pointer;display:flex;height:28px;justify-content:center;transition:background .15s;width:28px}.edit-user-modal__close:hover{background:var(--color-border)}.edit-user-modal__close svg{fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;height:16px;width:16px}.edit-user-modal__body{display:flex;flex-direction:column;gap:18px;padding:20px}.edit-user-modal__profile{align-items:center;display:flex;gap:14px}.edit-user-modal__avatar-wrap{border:2px solid var(--color-border);border-radius:50%;flex-shrink:0;height:48px;overflow:hidden;width:48px}.edit-user-modal__avatar-wrap img{height:100%;object-fit:cover;width:100%}.edit-user-modal__avatar-fallback{align-items:center;background:var(--color-accent);border-radius:50%;color:#fff;display:flex;flex-shrink:0;font-size:18px;font-weight:700;height:48px;justify-content:center;-webkit-user-select:none;user-select:none;width:48px}.edit-user-modal__profile-info{flex:1 1;min-width:0}.edit-user-modal__profile-name{color:var(--color-text-primary);font-size:14px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.edit-user-modal__profile-email{color:var(--color-text-secondary);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.edit-user-modal__footer{align-items:center;border-top:1px solid var(--color-border);display:flex;gap:10px;justify-content:space-between;padding:14px 20px 18px}.edit-user-modal__delete-btn{align-items:center;background:#0000;border:1px solid #e05c5c;border-radius:8px;color:#e05c5c;cursor:pointer;display:flex;font-size:13px;font-weight:600;gap:6px;padding:8px 14px;transition:background .15s,color .15s}.edit-user-modal__delete-btn svg{fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;height:14px;width:14px}.edit-user-modal__delete-btn:hover:not(:disabled){background:#fff0f0}.edit-user-modal__delete-btn:disabled{cursor:not-allowed;opacity:.5}.edit-user-modal__save-btn{align-items:center;background:var(--color-accent);border:none;border-radius:8px;color:#fff;cursor:pointer;display:flex;font-size:13px;font-weight:700;gap:6px;padding:8px 18px;transition:background .15s}.edit-user-modal__save-btn:hover:not(:disabled){background:var(--color-accent-dark)}.edit-user-modal__save-btn:disabled{cursor:not-allowed;opacity:.55}.edit-user-modal__confirm{align-items:center;display:flex;flex-direction:column;gap:10px;padding:8px 0 4px;text-align:center}.edit-user-modal__confirm-title{color:#e05c5c;font-size:15px;font-weight:700}.edit-user-modal__confirm-text{color:var(--color-text-secondary);font-size:13px}.edit-user-modal__confirm-actions{display:flex;gap:10px;margin-top:6px}.edit-user-modal__confirm-cancel{background:#0000;border:1px solid var(--color-border);border-radius:8px;color:var(--color-text-secondary);cursor:pointer;font-size:13px;font-weight:600;padding:8px 16px}.edit-user-modal__confirm-cancel:hover{background:var(--color-border)}.edit-user-modal__confirm-yes{background:#e05c5c;border:none;border-radius:8px;color:#fff;cursor:pointer;font-size:13px;font-weight:700;padding:8px 16px}.edit-user-modal__confirm-yes:hover{background:#c94040}.edit-user-modal__confirm-yes:disabled{cursor:not-allowed;opacity:.5}.edit-user-modal__result{align-items:center;display:flex;flex-direction:column;gap:12px;justify-content:center;min-height:140px;padding:28px 0 12px;text-align:center}.edit-user-modal__result-label{color:var(--color-text-primary);font-size:14px;font-weight:600}.edit-user-modal__result-label--error{color:#e05c5c}.env-dot{border-radius:50%;display:inline-block;flex-shrink:0;height:8px;width:8px}.env-dot--dev{background:#00a080}.env-dot--stage{background:#b97208}.env-dot--prod{background:#c0392b}.device-cards-list{display:flex;flex-direction:column;gap:12px}.device-scroll-sentinel{align-items:center;display:flex;flex-direction:column;padding:16px 0 8px}.device-loading-more{align-items:center;color:var(--color-text-secondary);display:flex;font-size:13px;gap:10px}.device-loading-more__spinner{animation:fw-spin .8s linear infinite;border:2.5px solid var(--color-border);border-radius:50%;border-top-color:var(--color-accent);flex-shrink:0;height:18px;width:18px}.device-end-message{align-items:center;color:var(--color-text-secondary);display:flex;font-size:13px;gap:10px;justify-content:center;padding:24px}.device-end-message svg{fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0;height:18px;width:18px}.device-card{background:#fff;border:1px solid var(--color-border);border-radius:14px;box-shadow:0 2px 12px #1e3c640f;overflow:hidden;transition:box-shadow .2s,border-color .2s}.device-card--open{border-color:var(--color-accent);box-shadow:0 4px 20px #1e3c641f}.device-card__header{align-items:center;background:#0000;border:none;cursor:pointer;display:flex;font-family:var(--font-family);gap:16px;padding:18px 24px;text-align:left;width:100%}.device-card__header:hover{background:#57c8e80a}.device-card__status-dot{border-radius:50%;flex-shrink:0;height:10px;width:10px}.device-card__status-dot--online{background:#22c55e;box-shadow:0 0 0 3px #22c55e33}.device-card__status-dot--offline{background:#ef4444}.device-card__status-dot--unknown{background:#94a3b8}.device-card__body{display:flex;flex:1 1;flex-direction:column;gap:3px;min-width:0}.device-card__name{color:var(--color-text-primary);font-size:14px;font-weight:700}.device-card__serial{color:var(--color-text-secondary);font-size:12px}.device-card__fv,.device-card__serial{font-family:JetBrains Mono,Fira Mono,Consolas,monospace;letter-spacing:.03em}.device-card__fv{color:var(--color-accent);font-size:11px;font-weight:600;margin-top:2px}.device-card__meta{color:#8492a6;color:var(--color-text-muted,#8492a6);flex-shrink:0;font-size:11px;white-space:nowrap}.device-card__arrow{fill:none;stroke:var(--color-text-secondary);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0;height:16px;opacity:.4;transition:opacity .2s,transform .3s cubic-bezier(.4,0,.2,1);width:16px}.device-card__header:hover .device-card__arrow{opacity:.7}.device-card--open .device-card__arrow{opacity:.9;transform:rotate(180deg)}.device-card__accordion{display:grid;grid-template-rows:0fr;transition:grid-template-rows .32s cubic-bezier(.4,0,.2,1)}.device-card--open .device-card__accordion{grid-template-rows:1fr}.device-card__accordion-inner{overflow:hidden}.device-card__board-grid{border-top:1px solid var(--color-border);display:flex;flex-direction:column;gap:0;padding:0 24px 16px}.board-entry{grid-gap:12px;align-items:center;border-bottom:1px solid #1e3c640d;display:grid;gap:12px;grid-template-columns:80px 130px 90px 1fr;padding:7px 0}.board-entry:last-child{border-bottom:none}.board-entry--header{border-bottom:1px solid var(--color-border);margin-bottom:2px;padding:10px 0 6px}.board-entry--header span{color:#8492a6;color:var(--color-text-muted,#8492a6);font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.board-entry__name{color:var(--color-text-secondary);font-size:12px;font-weight:700;letter-spacing:.05em;text-transform:uppercase}.board-entry__fv{color:var(--color-accent);font-weight:600}.board-entry__fv,.board-entry__hw{font-family:JetBrains Mono,Fira Mono,Consolas,monospace;font-size:12px}.board-entry__hw{color:var(--color-text-secondary)}.board-entry__sn{color:#8492a6;color:var(--color-text-muted,#8492a6);font-family:JetBrains Mono,Fira Mono,Consolas,monospace;font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.device-detail-overlay{align-items:center;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#000a198c;display:flex;inset:0;justify-content:center;opacity:0;padding:24px;pointer-events:none;position:fixed;transition:opacity .22s;z-index:500}.device-detail-overlay.open{opacity:1;pointer-events:auto}.device-detail-modal{background:#fff;border-radius:20px;box-shadow:0 24px 80px #000a2838;display:flex;flex-direction:column;max-height:90vh;max-width:880px;overflow:hidden;width:100%}.device-detail-modal__header{align-items:center;border-bottom:1px solid var(--color-border);display:flex;gap:12px;padding:20px 28px 16px}.device-detail-modal__title{align-items:center;color:var(--color-text-primary);display:flex;flex:1 1;font-size:16px;font-weight:700;gap:10px}.device-detail-modal__title svg{flex-shrink:0;height:18px;width:18px}.device-detail-modal__close{align-items:center;background:var(--color-bg);border:none;border-radius:8px;color:var(--color-text-secondary);cursor:pointer;display:flex;height:32px;justify-content:center;transition:background .2s,color .2s;width:32px}.device-detail-modal__close:hover{background:var(--color-border);color:var(--color-text-primary)}.device-detail-modal__close svg{fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;height:16px;width:16px}.device-detail-modal__body{display:flex;flex:1 1;min-height:360px;overflow:hidden}.device-detail-modal__map{background:#e8eef6;flex:1 1;overflow:hidden}.device-detail-modal__map iframe{border:none;display:block;height:100%;min-height:360px;width:100%}.device-detail-modal__no-map{align-items:center;color:var(--color-text-secondary);display:flex;flex-direction:column;font-size:13px;gap:12px;height:100%;justify-content:center;min-height:360px}.device-detail-modal__no-map svg{fill:none;stroke:#c8d6e8;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round;height:48px;width:48px}.device-detail-modal__info{border-left:1px solid var(--color-border);display:flex;flex-direction:column;flex-shrink:0;gap:18px;overflow-y:auto;padding:24px 22px;width:290px}.device-info-row{display:flex;flex-direction:column;gap:4px}.device-info-label{color:#8492a6;color:var(--color-text-muted,#8492a6);font-size:10px;font-weight:700;letter-spacing:.07em;text-transform:uppercase}.device-info-value{color:var(--color-text-primary);font-size:13px;word-break:break-all}.device-info-value--mono{font-family:JetBrains Mono,Fira Mono,Consolas,monospace;font-size:12px;letter-spacing:.04em}.device-status-badge{align-items:center;border-radius:20px;display:inline-flex;font-size:12px;font-weight:600;gap:6px;padding:3px 10px 3px 8px;width:fit-content}.device-status-badge:before{border-radius:50%;content:"";flex-shrink:0;height:7px;width:7px}.device-status-badge--online{background:#22c55e1f;color:#16a34a}.device-status-badge--online:before{background:#22c55e}.device-status-badge--offline{background:#ef44441a;color:#dc2626}.device-status-badge--offline:before{background:#ef4444}.device-status-badge--unknown{background:var(--color-bg);color:var(--color-text-secondary)}.device-status-badge--unknown:before{background:#94a3b8}.device-info-firmwares{display:flex;flex-direction:column;gap:8px}.device-info-fw-list{display:flex;flex-direction:column;gap:6px}.device-info-fw-item{background:var(--color-bg);border:1px solid var(--color-border);border-radius:8px;display:flex;flex-direction:column;gap:2px;padding:8px 10px}.device-fw-mcu{color:var(--color-accent);font-size:10px;font-weight:700;letter-spacing:.07em;text-transform:uppercase}.device-fw-title{color:var(--color-text-primary);font-size:12px;font-weight:600}.device-fw-date{color:var(--color-text-secondary);font-size:11px}.device-info-notes{display:flex;flex-direction:column;gap:4px}.device-info-notes .device-info-value{line-height:1.5;word-break:break-word}@media (max-width:600px){.device-detail-modal__body{flex-direction:column;min-height:0;min-height:auto;overflow-y:auto}.device-detail-modal__map{flex:none}.device-detail-modal__map,.device-detail-modal__map iframe,.device-detail-modal__no-map{height:200px;min-height:0;min-height:auto}.device-detail-modal__info{border-left:none;border-top:1px solid var(--color-border);overflow-y:visible;width:100%}}.update-bar{align-items:center;background-color:#4caf50;box-shadow:0 2px 8px #00000026;color:#fff;display:flex;font-size:14px;gap:16px;justify-content:center;left:0;padding:12px 20px;position:fixed;right:0;top:0;z-index:10000}.update-bar__button{background-color:#fff;border:none;border-radius:4px;color:#4caf50;cursor:pointer;font-size:14px;font-weight:600;padding:8px 16px;transition:transform .2s}.update-bar__button:hover{transform:scale(1.05)}.update-bar__button:active{transform:scale(.95)}
/*# sourceMappingURL=main.996bf012.css.map*/